package com.demo.core.dao;

import java.util.List;
import java.util.Map;

import com.demo.core.dao.base.BaseCoreDao;
import com.demo.core.model.SiteFunction;

/**
 * 站点功能数据访问层Dao
 * 
 * @author ryuu.kk
 */
public interface SiteFunctionDao extends BaseCoreDao<SiteFunction, Long> {

	/**
	 * 通过指定参数查询站点功能模型对象
	 * 其中模型带有Site和Function对象
	 * @param params 参数Map
	 * @return 站点功能模型对象
	 */
	List<SiteFunction> queryFunctionUnion(Map<String, Object> params);
	
	/**
	 * 通过指定参数查询站点功能树(其中包含功能模型),包含站点类型多包含的所有功能(站点已分配和未分配的功能)
	 * 注意:树结构查询中,因为SiteFunction的树结构由Function,而SiteFunction并不是一个树形结构,
	 * 则查询的SiteFunction对象ID和PID为Function的ID和PID,而不是本身的主键ID
	 * @param params 参数
	 * @return 站点功能树
	 */
	SiteFunction queryFunctionTree(Map<String, Object> params);
	
	/**
	 * 通过指定参数查询站点功能树(其中包含功能模型),只包含站点功能树为功能模型分配给站点使用的数据
	 * 注意:树结构查询中,因为SiteFunction的树结构由Function,而SiteFunction并不是一个树形结构,
	 * 则查询的SiteFunction对象ID和PID为Function的ID和PID,而不是本身的主键ID
	 * @param params 参数
	 * @return 站点功能树
	 */
	SiteFunction querySiteFunctionTree(Map<String, Object> params);
	
	/**
	 * 通过参数siteFunctionId、enabled查询站点已分配的功能Map
	 * @param params Map<String, Object>
	 * @return Map<Long, SiteFunction>
	 */
	Map<Long, SiteFunction> querySiteFunctionMap(Map<String, Object> params);
	
	/**
	 * 检索所有功能
	 * @param params Map<String, Object> 参数Map
	 * @return List<SiteFunction> 站点功能模型列表(包含功能对应角色信息)
	 */
	List<SiteFunction> querySiteFunctionAndRoleList(Map<String, Object> params);
	
}
